package main

import "fmt"

/*
1、声明结构体
type 结构体名称 struct{
	field1 type
	field2 type
}
2、字段/属性
基本介绍：
(1)从概念或叫法上看，结构体字段=属性=field
(2)字段是结构体的一个组成部分，一般是基本数据类型、数组，也可以是引用类型。
注意事项：
(1)字段声明语法同变量
(2)字段的类型可以为：基本类型、数组或引用类型
(3)在创建一个结构体变量后，如果没有给字段赋值，都对应一个零值(默认值)，规则跟前面一样：
布尔类型是false，数值是0，字符串是""
数组类型的默认值和它的元素类型相关，比如score [3]int则为[0,0,0]
指针，slice和map的零值都是nil，即还没有分配空间
(4)不同结构体变量的字段是独立，互不影响，一个结构体变量字段的更改，不影响另外一个，结构体是值类型
*/
type Person struct {
	Name   string
	Age    int
	Scores [5]float64
	ptr    *int              //指针
	slice  []int             //切片
	map1   map[string]string //切片
}

func main() {
	//定义结构体变量
	var p1 Person
	fmt.Println(p1)
	if p1.ptr == nil {
		fmt.Println("ok1")
	}
	if p1.slice == nil {
		fmt.Println("ok2")
	}
	if p1.map1 == nil {
		fmt.Println("ok3")
	}
	p1.slice = make([]int, 2) //要先make
	p1.slice[0] = 100
	fmt.Println(p1)
}
